home *** CD-ROM | disk | FTP | other *** search
/ Aminet 8 / Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso / Aminet / dev / c / mkid.lha / src / raw.c < prev    next >
C/C++ Source or Header  |  1995-06-29  |  2KB  |  92 lines

  1. /*
  2.  *      raw.c
  3.  *
  4.  *    This is a routine for setting a given stream to raw or cooked mode.
  5.  * This is useful when you are using Lattice C to produce programs that
  6.  * want to read single characters with the "getch()" or "fgetc" call.
  7.  *
  8.  * Written : 18-Jun-87 By Chuck McManis.
  9.  *           If you use it I would appreciate credit for it somewhere.
  10.  */
  11. #include <exec/types.h>
  12. #include <libraries/dos.h>
  13. #include <libraries/dosextens.h>
  14. #include <stdio.h>
  15. #include <ios1.h>
  16. #include <error.h>
  17.  
  18. /* New Packet in 1.2 */
  19. //#define ACTION_SCREEN_MODE      994L
  20.  
  21. extern  int     errno;          /* The error variable */
  22.  
  23. /*
  24.  * Function raw() - Convert the specified file pointer to 'raw' mode. This
  25.  * only works on TTY's and essentially keeps DOS from translating keys for
  26.  * you, also (BIG WIN) it means getch() will return immediately rather than
  27.  * wait for a return. You lose editing features though.
  28.  */
  29. long
  30. raw(fp)
  31.  
  32. FILE *fp;
  33.  
  34. {
  35.   struct MsgPort        *mp; /* The File Handle message port */
  36.   struct FileHandle     *afh;
  37.   struct UFB            *ufb;
  38.   long                  Arg[1],res;
  39.  
  40.   ufb = (struct UFB *) chkufb(fileno(fp));  /* Step one, get the file handle */
  41.   afh = (struct FileHandle *)(ufb->ufbfh);
  42.  
  43.   if (!IsInteractive(afh)) {    /* Step two, check to see if it's a console */
  44.     errno = ENOTTY;
  45.     return(-1);
  46.   }
  47.                               /* Step three, get it's message port. */
  48.   mp  = ((struct FileHandle *)(BADDR(afh)))->fh_Type;
  49.   Arg[0] = -1L;
  50. //  res = SendPacket(mp,ACTION_SCREEN_MODE,Arg,1); /* Put it in RAW: mode */
  51.   res = DoPkt(mp,ACTION_SCREEN_MODE,DOSTRUE);
  52.   if (res == 0) {
  53.     errno = ENXIO;
  54.     return(-1);
  55.   }
  56.   return(0);
  57. }
  58.  
  59. /*
  60.  * Function - cooked() this function returns the designate file pointer to
  61.  * it's normal, wait for a <CR> mode. This is exactly like raw() except that
  62.  * it sends a 0 to the console to make it back into a CON: from a RAW:
  63.  */
  64.  
  65. long
  66. cooked(fp)
  67.  
  68. FILE *fp;
  69.  
  70. {
  71.   struct MsgPort        *mp; /* The File Handle message port */
  72.   struct FileHandle     *afh;
  73.   struct UFB            *ufb;
  74.   long                  Arg[1],res;
  75.  
  76.   ufb = (struct UFB *) chkufb(fileno(fp));
  77.   afh = (struct FileHandle *)(ufb->ufbfh);
  78.   if ( ! IsInteractive(afh)) {
  79.     errno = ENOTTY;
  80.     return(-1);
  81.   }
  82.   mp  = ((struct FileHandle *)(BADDR(afh)))->fh_Type;
  83.   Arg[0] = 0;
  84. //  res = SendPacket(mp,ACTION_SCREEN_MODE,Arg,1);
  85.   res = DoPkt(mp,ACTION_SCREEN_MODE,DOSFALSE);
  86.   if (res == 0) {
  87.     errno = ENXIO;
  88.     return(-1);
  89.   }
  90.   return(0);
  91. }
  92.